﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Inventario_HardSoft.Controlador;
using Inventario_HardSoft.ADO;

namespace Inventario_HardSoft.Presentacion
{ 
    public partial class UC_RegProb_Sw : UserControl
    {
        private Ctrl_Reg_Usu control_RegUsu;
        private Ctrl_Reg_Sol control_RegSolucion;
        private Ctrl_Softwares control_Software;
        private Ctrl_Nombre_Equipo get_Equipo;
        private string nombreUsuario;
        private string nombreEq;  
  
        public UC_RegProb_Sw()
        {
            InitializeComponent();            
            control_RegUsu = new Ctrl_Reg_Usu();
            control_RegSolucion = new Ctrl_Reg_Sol();
            control_Software = new Ctrl_Softwares();
            get_Equipo = new Ctrl_Nombre_Equipo();
        }

        public UC_RegProb_Sw(string nombreUsuario) : this()
        {
            this.nombreUsuario = nombreUsuario;
            txt_registradopor.Text = nombreUsuario;
        }

        public UC_RegProb_Sw(string nombreUsuario, string nombreEq): this()
        {
            // TODO: Complete member initialization
            this.nombreUsuario = nombreUsuario;
            this.nombreEq = nombreEq;
        }

        private void combo_usuario_DropDown(object sender, EventArgs e)
        {
            //limpiamos el combo
            combo_usuario.Items.Clear();
            //vas a llenar el listbox, llamar a la base de datos
            List<USUARIO> usuarios = control_RegUsu.getList_Reg_Usu();
            foreach (USUARIO r in usuarios) //recorre cada elemento de label1 lista
            {
                combo_usuario.Items.Add(r.NOMBRE.ToString());
            }
        }

        private void combo_asistentereparador_DropDown(object sender, EventArgs e)
        {
            //limpiamos el combo
            combo_asistentereparador.Items.Clear();
            //vas a llenar el listbox, llamar a la base de datos
            List<USUARIO> reparadores = control_RegSolucion.getList_AsistentesNames();
            foreach (USUARIO r in reparadores) //recorre cada elemento de label1 lista
            {
                combo_asistentereparador.Items.Add(r.NOMBRE.ToString());
            }
        }
        private void combo_usuario_SelectionChangeCommitted(object sender, EventArgs e)
        {
            //llenamos la grilla
            string nomb_usu = combo_usuario.Text;
            grid_equipos.Rows.Clear();
            grid_Programas.Rows.Clear();
            control_RegUsu.get_MuestroEquipos_Cliente(grid_equipos, nomb_usu);  
        }

        private void grid_equipos_SelectionChanged(object sender, EventArgs e)
        {
            if (grid_equipos.SelectedRows.Count > 0)
            {
                string idEquiposelected = grid_equipos.SelectedRows[0].Cells["idequipo"].Value.ToString();
                control_Software.getListProgramas_Equipo(grid_Programas, idEquiposelected);
            }
        }

        internal DialogResult registrarProblemaSw()
        {
            DialogResult result = DialogResult.Cancel;

            if (combo_usuario.SelectedIndex >= 0)
            {
                if (grid_equipos.SelectedRows.Count > 0)
                {
                    if (grid_Programas.SelectedRows.Count > 0)
                    {
                        if (combo_asistentereparador.SelectedIndex >= 0)
                        {
                            if (Convert.ToDateTime(time_fechaEntrega.Text).CompareTo(DateTime.Today) >= 0)
                            {
                                if (cmb_Prioridad.SelectedIndex >= 0)
                                {
                                    if (!string.IsNullOrWhiteSpace(txt_problema.Text))
                                    {
                                        //verificar que no se registre un problema con el mismo programa
                                        DialogResult dr = control_Software.tieneProblema_Software(grid_Programas.SelectedRows[0].Cells["idPrograma"].Value.ToString());
                                        if (dr == DialogResult.Cancel)
                                        {
                                            //registramos el problema
                                            PROBLEMA p = new PROBLEMA()
                                            {
                                                IDEQUIPO = grid_equipos.SelectedRows[0].Cells["idequipo"].Value.ToString(),
                                                IDPROGRAMA = grid_Programas.SelectedRows[0].Cells["idPrograma"].Value.ToString(),
                                                REGISTRADOPOR = txt_registradopor.Text,
                                                REPARADORNAME=  combo_asistentereparador.SelectedItem.ToString(),
                                                PRIORIDAD = control_Software.getNumPrioridad(cmb_Prioridad.SelectedItem.ToString()),
                                                FECHAENTREGA = Convert.ToDateTime(time_fechaEntrega.Text),
                                                FECHAREGISTROENTRADA = DateTime.Now,
                                                FECHAREGISTROSALIDA = null,
                                                TIEMPOREPARACION = string.Empty,
                                                DESCRIPCION = txt_problema.Text,
                                                OBSERVACIONES = txt_observaciones.Text,
                                                ESTADO = "pendiente",
                                                SOLUCION = string.Empty,
                                                ELIMINADO = 0
                                            };

                                            result = control_Software.registrarProbSoftware(p);
                                        }
                                        else if(dr == DialogResult.OK)
                                        {
                                            MessageBox.Show("El equipo seleccionado tiene registrado otro problema con el mismo programa. No se puede registrar otro problema adicional", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("No ha registrado la descripción del problema", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("No ha seleccionado la prioridad del problema", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                                }
                            }
                            else
                            {
                                MessageBox.Show("No puede registrar un problema con una fecha de entrega anterior a la fecha actual", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                            }
                        }
                        else
                        {
                            MessageBox.Show("No ha seleccionado el asistente/reparador.", "Inventario HardSoft", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Seleccione un programa para registrar un problema.", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione un equipo para registrar un problema.", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("No ha seleccionado el usuario.", "Camilo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
            return result;
        }

        private void UC_RegProb_Sw_Load(object sender, EventArgs e)
        {
            txt_registradopor.Text = nombreUsuario;
            if (!String.IsNullOrWhiteSpace(nombreEq))
            {
                String usuName = get_Equipo.Lista_Equipo(nombreEq);
                this.combo_usuario_DropDown(sender, e);
                combo_usuario.SelectedIndex = combo_usuario.FindStringExact(usuName);
                this.combo_usuario_SelectionChangeCommitted(sender, e);
                grid_equipos.ClearSelection();
            }
            else
            {
                grid_equipos.Rows.Clear();
            }  
        }

        private void group_equipos_Enter(object sender, EventArgs e)
        {

        }
    }
}
